package com.example.ad.sdk.domain.ad

import android.view.View

/**
 * 原生广告接口
 *
 * 定义了加载不同类型广告的方法，以及相关的监听器接口。
 * 包括插屏广告和开屏广告的加载功能。
 */
 interface AdNative {

    /**
     * 加载插屏广告
     *
     * @param adListener 插屏广告交互监听器，用于接收广告加载状态回调
     */
    fun loadInterstitialAd(adListener: AdInteractionListener)

    /**
     * 加载开屏广告
     *
     * @param adListener 开屏广告监听器，用于接收广告加载和展示状态回调
     */
    fun loadSplashAd(adListener: AdSplashListener)

    /**
     * 插屏广告交互监听器
     *
     * 定义了插屏广告加载过程中的各种状态回调方法。
     */
    public interface AdInteractionListener{
        /**
         * 广告开始加载时回调
         */
        fun onLoading()
        
        /**
         * 广告加载成功时回调
         *
         * @param adView 加载成功的广告视图
         */
        fun onLoaded(adView: View)
        
        /**
         * 广告加载失败时回调
         *
         * @param error 错误信息描述
         */
        fun onFailed(error: String)
     }

    /**
     * 开屏广告监听器
     *
     * 定义了开屏广告加载和展示过程中的各种状态回调方法。
     */
    public interface AdSplashListener{
        /**
         * 广告开始加载时回调
         */
        fun onLoading()
        
        /**
         * 广告加载成功时回调
         */
        fun onLoaded()
        
        /**
         * 广告展示时回调
         */
        fun onShowed()
        
        /**
         * 广告加载或展示失败时回调
         *
         * @param error 错误信息描述
         */
        fun onFailed(error: String)
    }
}

/**
 * 广告请求参数数据类
 *
 * @property count 请求的广告数量
 */
data class AdRequestParam(val count: Int)